home *** CD-ROM | disk | FTP | other *** search
- incdir df0:
- Include "CustomRegisters"
- Section Cube,Code_c
-
- Ciaapra = $BFE001
- Openlibrary = -30-522
- Disable = -120
- Enable = -126
- Startlist = 38
- Execbase = 4
-
- Move.l Execbase,a6
- Jsr Disable(a6)
-
- ;-------- Switch Copper DMA ----------
-
- Move.l #Clstart,Cop1lc
- Clr Copjmp1
-
- Move.w #$8780,Dmacon
- Move.w #$0020,Dmacon
- Lea Spr0data,a0
- Moveq #7,d0
- Clop
- Clr.l (a0)
- Addq.l #8,a0
- Dbf d0,Clop
-
- ;------ Wait for Vertical position 1 --------
-
- Wait: Move.l $dff004,d2
- And.l #$0001ff00,d2
- Cmp.l #$00000100,d2
- Bne.s Wait
-
- Addq #2,Zrot
- And #$1fe,Zrot
- Addq #4,Yrot
- And #$1fe,Yrot
- Subq #2,Xrot
- And #$1fe,Xrot
- Bsr TD_rout
-
- Btst #6,Ciaapra
- Bne Wait
-
- ;------ Restore old Copper list -----------
-
- Move.l Execbase,a6
- Move.l #Grname,a1
- Clr.l d0
- Jsr Openlibrary(a6)
- Move.l d0,a4
- Move.l Startlist(a4),Cop1lc
- Clr.w Copjmp1
- Move.w #$83E0,Dmacon
- Jsr Enable(a6)
- Clr.l d0
- Rts
-
- ;--------- 3D graphics ------------
- TD_rout
- Move.l Current(pc),d0
- Move d0,Screen+2
- Swap d0
- Move d0,Screen+6
- Eor.l #$3000,Current
- Move.l Current(pc),a0
- Move.l #$1f00000,Bltcon0
- Move.l a0,Bltdpth
- Clr Bltadat
- Clr Bltdmod
- Move #256*64+20,Bltsize
-
- Move #No_points-1,d7
- Lea Points(pc),a4
- Lea Sintable+$40(pc),a1
- Lea Rotated_coords(pc),a2
- Lea Perspective(pc),a3
- TD_loop
- Move (a4)+,d0
- Move d0,d2
- Move (a4)+,d1
- Move d1,d3
-
- Move Zrot(pc),d6
- Move $40(a1,d6),d4
- Move -$40(a1,d6),d5
- Muls d4,d0
- Muls d5,d1
- Sub.l d1,d0
- Add.l d0,d0
- Swap d0 ;d0 holds intermediate x coord
- Muls d5,d2
- Muls d4,d3
- Add.l d3,d2
- Add.l d2,d2
- Swap d2 ;d2 holds intermediate y coord
- Move d2,d4
-
- Move (a4)+,d1 ;z coord
- Move d1,d3
- Move Xrot(pc),d6
- Move $40(a1,d6),d5
- Move -$40(a1,d6),d6
- Muls d5,d2
- Muls d6,d1
- Sub.l d1,d2
- Add.l d2,d2
- Swap d2 ;d2 holds the final y coord
- Muls d5,d3
- Muls d6,d4
- Add.l d4,d3
- Add.l d3,d3
- Swap d3 ;d3 holds intermediate z coord
-
- Move d0,d1
- Move d3,d4
- Move Yrot(pc),d6
- Move $40(a1,d6),d5
- Move -$40(a1,d6),d6
- Muls d5,d3
- Muls d6,d0
- Sub.l d0,d3
- Add.l d3,d3
- Swap d3 ;d3 holds the final z coord
- Muls d6,d4
- Muls d5,d1
- Add.l d4,d1
- Add.l d1,d1
- Swap d1 ;d1 holds the final x coord
-
- Add Depth(pc),d3
- Add d3,d3
- Move (a3,d3),d5
- Muls d5,d1
- Muls d5,d2
- Add.l d1,d1
- Swap d1
- Add #160,d1
- Add.l d2,d2
- Swap d2
- Add #128,d2
-
- Move d1,(a2)+
- Move d2,(a2)+
- Dbf d7,TD_loop
-
- Move #No_connects-1,d7
- Lea $dff000,a5
- Lea Connect(pc),a3
- Lea Rotated_coords(pc),a4
- Moveq #40,d0
- Lea Mul40(pc),a1
- Lea Bits(pc),a2
- B_wait2
- Btst #14,Dmaconr
- Bne.s B_wait2
-
- Move #$ffff,Bltafwm
- Move d0,$60(a5) ;Bltcmod
- Move d0,$66(a5) ;Bltdmod
- Move #$ffff,$72(a5) ;Bltbdat
- Draw_loop
- Move (a3)+,d6
- Move (a4,d6),d0
- Move 2(a4,d6),d1
- Move (a3)+,d6
- Move (a4,d6),d2
- Move 2(a4,d6),d3
- Cmp d0,d2
- Bne.s Draw
- Cmp d1,d3
- Beq.s Nodraw
- Draw
- Bsr Line
- Nodraw
- Dbf d7,Draw_loop
- Bwit
- Btst #14,Dmaconr
- Bne.s Bwit
- Rts
-
- ;----------- Line Draw ------------
- Line
- Moveq #0,d4
- Move d1,d4
- Add d4,d4
- Move (a1,d4),d4
- Moveq #-$10,d5
- And d0,d5
- Lsr #3,d5
- Add d5,d4
- Add.l a0,d4
-
- Moveq #0,d5
- Sub d1,d3
- Roxl.b d5
- Tst d3
- Bge.s Y2gy1
- Neg d3
- Y2gy1
- Sub d0,d2
- Roxl.b d5
- Tst d2
- Bge.s X2gx1
- Neg d2
- X2gx1
-
- Move d3,d1
- Sub d2,d1
- Bge.s Dygdx
- Exg d2,d3
- Dygdx
- Roxl.b d5
- Move.b Octant_table(pc,d5),d5
- Add d2,d2
- Wblit
- Btst #14,Dmaconr
- Bne.s Wblit
-
- Move d2,$62(a5) ;Bltbmod
- Sub d3,d2
- Bge.s Signn1
- Or.b #$40,d5
- Signn1
- Move d2,$52(a5) ;Bltaptl
- Sub d3,d2
- Move d2,$64(a5) ;Bltamod
-
- Move #$8000,$74(a5) ;Bltadat
- Add d0,d0
- Move (a2,d0),$40(a5) ;Bltcon0
- Move d5,$42(a5) ;Bltcon1
- Move.l d4,$48(a5) ;Bltcpth
- Move.l d4,$54(a5) ;Bltdpth
- Lsl #6,d3
- Addq #2,d3
- Move d3,$58(a5) ;Bltsize
- Rts
-
- ;---------- Constants -------------
-
- Octant_table
- Dc.b 1,17,9,21,5,25,13,29
-
- Grname: Dc.b "graphics.library",0
-
- Even
-
- ;----------- Variables ------------
-
- Xrot Dc.w $100
- Yrot Dc.w 0
- Zrot Dc.w 0
- Current Dc.l $70000
- Depth Dc.w 180
- Depthpt Dc.w 0
-
- ;---------- Copperlists -----------
- Clstart:
- Wait 0,20
- Mov $1a81,Diwstrt
- Mov $39c1,Diwstop
- Mov $0038,Ddfstrt
- Mov $00d0,Diwstop
- Screen
- Mov 0,Bpl1ptl
- Mov 7,Bpl1pth
- Mov $1200,Bplcon0
- Mov 0,Bpl1mod
- Mov 0,Color00
- Mov $fff,Color01
- Wait 224,255
- Wait $fe,$ff
-
- ;--------- Binaries -------------
- No_points = 8
- No_connects = 12
- No_faces = 6
-
- Points
- Dc.w 100,100,100
- Dc.w -100,100,100
- Dc.w -100,-100,100
- Dc.w 100,-100,100
-
- Dc.w 100,100,-100
- Dc.w -100,100,-100
- Dc.w -100,-100,-100
- Dc.w 100,-100,-100
-
- Connect
- Dc.w 0,4
- Dc.w 4,8
- Dc.w 8,12
- Dc.w 12,0
-
- Dc.w 16,20
- Dc.w 20,24
- Dc.w 24,28
- Dc.w 28,16
-
- Dc.w 0,16
- Dc.w 4,20
- Dc.w 8,24
- Dc.w 12,28
-
- Rotated_coords
- Dcb.w No_points*2,0
- Sintable
- DC.W $15FC,$1920,$1C44,$1F68
- DC.W $228C,$25B0,$28D4,$2B1F
- DC.W $2E10,$30FB,$33DE,$36B9
- DC.W $398C,$3C56,$3F17,$41CD
- DC.W $447A,$471C,$49B3,$4C3F
- DC.W $4EBF,$5133,$539A,$55F5
- DC.W $5842,$5A82,$5CB3,$5ED7
- DC.W $60EB,$62F1,$64E8,$66CF
- DC.W $68A6,$6A6D,$6C23,$6DC9
- DC.W $6F5E,$70E2,$7254,$73B5
- DC.W $7504,$7641,$776B,$7884
- DC.W $7989,$7A7C,$7B5C,$7C29
- DC.W $7CE3,$7D89,$7E1D,$7E9C
- DC.W $7F09,$7F61,$7FA6,$7FD8
- DC.W $7FF5,$7FFF,$7FF5,$7FD8
- DC.W $7FA6,$7F61,$7F09,$7E9C
- DC.W $7E1D,$7D89,$7CE3,$7C29
- DC.W $7B5C,$7A7C,$7989,$7884
- DC.W $776B,$7641,$7504,$73B5
- DC.W $7254,$70E2,$6F5E,$6DC9
- DC.W $6C23,$6A6D,$68A6,$66CF
- DC.W $64E8,$62F1,$60EB,$5ED7
- DC.W $5CB3,$5A82,$5842,$55F5
- DC.W $539A,$5133,$4EBF,$4C3F
- DC.W $49B3,$471C,$447A,$41CD
- DC.W $3F17,$3C56,$398C,$36B9
- DC.W $33DE,$30FB,$2E10,$2B1F
- DC.W $2826,$2527,$2223,$1F19
- DC.W $1C0B,$18F8,$15E1,$12C7
- DC.W $FAB,$C8B,$96A,$647
- DC.W $324,0,$FCDB,$F9B8
- DC.W $F695,$F374,$F054,$ED38
- DC.W $EA1E,$E707,$E3F4,$E0E6
- DC.W $DDDC,$DAD8,$D7D9,$D4E0
- DC.W $D1EF,$CF04,$CC21,$C946
- DC.W $C673,$C3A9,$C0E8,$BE32
- DC.W $BB85,$B8E3,$B64C,$B3C0
- DC.W $B140,$AECC,$AC65,$AA0A
- DC.W $A7BD,$A57D,$A34C,$A128
- DC.W $9F14,$9D0E,$9B17,$9930
- DC.W $9759,$9592,$93DC,$9236
- DC.W $90A1,$8F1D,$8DAB,$8C4A
- DC.W $8AFB,$89BE,$8894,$877B
- DC.W $8676,$8583,$84A3,$83D6
- DC.W $831C,$8276,$81E2,$8163
- DC.W $80F6,$809E,$8059,$8027
- DC.W $800A,$8000,$800A,$8027
- DC.W $8059,$809E,$80F6,$8163
- DC.W $81E2,$8276,$831C,$83D6
- DC.W $84A3,$8583,$8676,$877B
- DC.W $8894,$89BE,$8AFB,$8C4A
- DC.W $8DAB,$8F1D,$90A1,$9236
- DC.W $93DC,$9592,$9759,$9930
- DC.W $9B17,$9D0E,$9F14,$A128
- DC.W $A34C,$A57D,$A7BD,$AA0A
- DC.W $AC65,$AECC,$B140,$B3C0
- DC.W $B64C,$B8E3,$BB85,$BE32
- DC.W $C0E8,$C3A9,$C673,$C946
- DC.W $CC21,$CF04,$D1EF,$D4E0
- DC.W $D7D9,$DAD8,$DDDC,$E0E6
- DC.W $E3F4,$E707,$EA1E,$ED38
- DC.W $F054,$F374,$F695,$F9B8
- DC.W $FCDB,0,$324,$647
- DC.W $96A,$C8B,$FAB,$12C7
- DC.W $15E1,$18F8,$1C0B,$1F19
- DC.W $2223,$2527,$2826,$2B1F
- DC.W $2E10,$30FB,$33DE,$36B9
- DC.W $398C,$3C56,$3F17,$41CD
- DC.W $447A,$471C,$49B3,$4C3F
- DC.W $4EBF,$5133,$539A,$55F5
- DC.W $5842,$5A82,$5CB3,$5ED7
- DC.W $60EB,$62F1,$64E8,$66CF
- DC.W $68A6,$6A6D,$6C23,$6DC9
- DC.W $6F5E,$70E2,$7254,$73B5
- DC.W $7504,$7641,$776B,$7884
- DC.W $7989,$7A7C,$7B5C,$7C29
- DC.W $7CE3,$7D89,$7E1D,$7E9C
- DC.W $7F09,$7F61,$7FA6,$7FD8
- DC.W $7FF5,$7FFF,$7FF5,$7FD8
- dc.w $7fd8,$7fa6,$7f61,$7f09
- dc.w $7e9c,$7e1d,$9d89,$7ce3
- dc.w $7c29,$7b5c,$7a7c,$7989
- dc.w $7884,$776b,$7641,$7504
- dc.w $73b5,$7254,$70e2,$6f5e
- dc.w $6dc9,$6c23,$6a6d,$68a6
- dc.w $66cf,$64e8,$62f1,$60eb
- dc.w $5ed7,$5cb3,$5a82,$5842
- dc.w $55f5,$539a,$5133,$4ebf
- dc.w $4c3f,$49b3,$471c,$447a
- dc.w $41cd,$3f17,$3c56,$398c
- dc.w $36b9,$33de,$30fb,$2e10
- dc.w $2b1f,$28d4,$25b0,$228c
- dc.w $1f68,$1c44,$1920,$15fc
- Perspective
- Incbin "Perspective"
-
- Mul40
- A set 0
- Rept 320
- Dc.w A*40
- A set A+1
- Endr
-
- A set 0
- Bits
- Rept 320
- Dc.w ((A&$f)*$1000)+$bca
- A set A+1
- Endr
-
- Size
- A set 0
- Rept 320
- Dc.w (A*64)+2
- A set A+1
- Endr
-
- end
-